This is a document describing Kara’s initial exploration of the data from Packets 1-3.

These packets included 29 scales or subscales, including the following:

Means by site

First, let’s compare the mean responses to each subscale across the 5 sites. I’ll plot each subscale in a separate mini-plot (denoted in the title of each mini-plot). The x-axis and color denote the site (US, Ghana, Thailand, China, or Vanuatu). Note the the range y-axis varies between mini-plots. The dot shows what the mean response was for that subscale for that site, and the error bars show a 95% confidence interval for that mean.

Joining, by = c("ctry", "packet", "subscale")

Cluster analysis

… of sites

Now let’s try a formal analysis for determining how similar these 5 sites are to each other.

Hierarchical clustering basically works like this: If there are 5 things - A, B, C, D, and E - this analysis will try to group pairs of like things together. E.g., first it might pair A and D together, then it will pretend that there are just 4 things - AD, B, C, and E. Then it might pair B and C together, and then pretend that there are just 3 things - AD, BC, and E. Then it might pair AD and BC together, and then pretend that there are just 2 things: ADBC and E. It will do this until there is just one “thing” left.

So to read this plot, look for the pairings. Sites that are on the same “branch” in this “dendrogram” showed similar patterns of means on the subscales. The closer together they are on that branch, the more similar they were.

… of subscales

Now let’s do the same thing for the subscales: Which subscales “hang together”?

To read this plot, again, look for the pairings. Subscales that are on the same “branch” in this “dendrogram” showed similar patterns of means across the 5 sites. The closer together they are on that branch, the more similar they were.

Look at correlations among subscales by site

Now let’s take a closer look at which subscales seem to “hang together,” by looking at the correlations between scales in their means for each site.

To read this plot, find one scale on the x-axis, and another scale on the y-axis. The value (and color) at that point in the grid shows you the correlation between these two subscale means across the 5 sites. The maximum possible correlation is +1 (red), and the minimum is -1 (blue).

I ordered the scales according to the cluster analysis we just did above, so you can see “patches” of scales that all tended to have similar patterns of means across sites.

Look at correlations among subscales by individuals

We could do the same thing thinking about individual participants instead of sites - but it’s important to keep in mind that most people didn’t fill out all 29 subscales! So we’ll focus on just looking at how the subscales within each packet (Packet 1, 2, or 3) “hang together” for the people who completed that packet.

As above, to read these plots, find one scale on the x-axis, and another scale on the y-axis. The value (and color) at that point in the grid shows you the correlation between these two subscale means across the 5 sites. The maximum possible correlation is +1 (red), and the minimum is -1 (blue). (Note that these scales are being presented in alphabetical order, not by any sort of clustering analysis.)

Packet 1

Setting row names on a tibble is deprecated.

Packet 2

Setting row names on a tibble is deprecated.

Packet 3

Setting row names on a tibble is deprecated.

All packets

Just for fun, here’s a look at the correlations among individual participants’ subscale scores across all scales. Note that some of these pairs of subscales probably have very few observations going into these correlations!! So take this with a grain of salt.

Setting row names on a tibble is deprecated.

Focusing on absorption & spiritual events

Let’s look at relationships between absorption & spiritual events across individual participants, but separating out by site. Tanya’s strong prediction would be that higher absorption (as captured by the Tellegen scale, exwl) would be correlated with more spiritual events (as indxed by the Luhrmann scale, spev).

Here’s a test for the overall correlation:


    Pearson's product-moment correlation

data:  exwl and spev
t = 8.3864, df = 485, p-value = 5.495e-16
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.2757416 0.4310991
sample estimates:
      cor 
0.3558766 

Looks like this prediction is born out by the data! Absorption was significantly positively correlated with reported spiritual events (\(r\) = 0.36, \(p\) = <0.001), accounting for approximately 13% of the variance in reported spirtual events.

Now let’s take a look at what’s going on in each site with a regression analysis:

b se t p
baserate (overall) 17.54 0.53 33.1 <0.001
baserate (ghana vs. overall) 16.05 1.10 14.6 <0.001
baserate (thailand vs. overall) -6.17 0.98 -6.3 <0.001
baserate (china vs. overall) -10.79 1.01 -10.7 <0.001
baserate (vanuatu vs. overall) 4.88 1.19 4.1 <0.001
absorption (overall) 0.96 0.09 11.1 <0.001
absorption (ghana vs. overall) 0.47 0.16 3.0 0.003
absorption (thailand vs. overall) -0.25 0.18 -1.4 0.154
absorption (china vs. overall) -0.36 0.18 -2.0 0.044
absorption (vanuatu vs. overall) 0.23 0.19 1.2 0.230

These results indicate that, as predicted, there was a significant positive relationship between absorption and reported spiritual events, collapsing across sites (\(b\) = 0.96, \(p\) = <0.001). The relationship between absorption and spiritual events was particularly strong among participants in Ghana (\(b\) = 0.47, \(p\) = 0.003), and (perhaps) weaker than average among participants in China (\(b\) = -0.36, \(p\) = 0.044).

Note also that there are overall differences in the baserates for reporting spiritual events: Participants in Ghana and Vanuatu generally reported more than average (Ghana: \(b\) = 16.05, \(p\) = <0.001; Vanuatu: \(b\) = 4.88, \(p\) = <0.001), while participants in Thailand and China generally reported fewer than average (Thailand: \(b\) = -6.17, \(p\) = <0.001; China: \(b\) = -10.79, \(p\) = <0.001).

Here’s a visualization of these relationships:

Dualism

Here’s just some initial attempt to take a look at how the dualism questions hang together… more on this later.

Joining, by = "question"
Column `question` joining character vector and factor, coercing into character vector

LS0tCnRpdGxlOiAnU0MgZGF0YSBlbnRyeTogUGFja2V0cyAxLTMnCnN1YnRpdGxlOiAnS1cgaW5pdGlhbCBleHBsb3JhdGlvbiAodXBkYXRlZCB3aXRoIGRhdGEgZnJvbSAyMDE4LTAxLTMxKScKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6IGRlZmF1bHQKICBodG1sX2RvY3VtZW50OgogICAgZGZfcHJpbnQ6IHBhZ2VkCiAgcGRmX2RvY3VtZW50OiBkZWZhdWx0Ci0tLQoKYGBge3IsIGluY2x1ZGUgPSBGQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBGQUxTRSwgbWVzc2FnZSA9IEZBTFNFKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gRkFMU0V9CiMgc2V0IHdvcmtpbmcgZGlyZWN0b3IKIyBzZXR3ZCgiL1VzZXJzL2t3ZWlzbWFuL0RvY3VtZW50cy9SZXNlYXJjaCAoU3RhbmZvcmQpL1Byb2plY3RzL1RlbXBsZXRvbiBHcmFudC9EQVRBIFdSQU5HTElORy90ZW1wbGV0b25fcGFja2V0cy9wYWNrZXRzMTIzLyIpCgojIGxvYWQgcGFja2FnZXMKbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkocm1zKQpsaWJyYXJ5KGdnZGVuZHJvKQoKIyBsb2FkIHF1ZXN0aW9uIGtleSAoaW5jbHVkaW5nIG1hbnVhbCByZXZlcnNlLWNvZGluZykKcXVlc3Rpb25fa2V5IDwtIHJlYWQuY3N2KCIvL1VzZXJzL2t3ZWlzbWFuL0RvY3VtZW50cy9SZXNlYXJjaCAoU3RhbmZvcmQpL1Byb2plY3RzL1RlbXBsZXRvbiBHcmFudC9EQVRBIFdSQU5HTElORy90ZW1wbGV0b25fcGFja2V0cy9wYWNrZXRzMTIzL3BhY2tldHMxMjNfcXVlc3Rpb25fa2V5X2J5aGFuZC5jc3YiKQoKIyBsb2FkIGRhdGEKZF93aWRlIDwtIHJlYWRfY3N2KCIuL3BhY2tldHMxMjNfZGF0YV9ieXF1ZXN0aW9uX3dpZGUuY3N2IikgJT4lCiAgbXV0YXRlKGN0cnkgPSBmYWN0b3IoY3RyeSwgCiAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygidXMiLCAiZ2hhbmEiLCAidGhhaWxhbmQiLCAiY2hpbmEiLCAidmFudWF0dSIpKSkKZF93aWRlX3N1YnNjYWxlIDwtIHJlYWRfY3N2KCIuL3BhY2tldHMxMjNfZGF0YV9ieXN1YnNjYWxlX3dpZGUuY3N2IikgJT4lCiAgbXV0YXRlKGN0cnkgPSBmYWN0b3IoY3RyeSwgCiAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygidXMiLCAiZ2hhbmEiLCAidGhhaWxhbmQiLCAiY2hpbmEiLCAidmFudWF0dSIpKSkKZF9sb25nIDwtIHJlYWRfY3N2KCIuL3BhY2tldHMxMjNfZGF0YV9ieXF1ZXN0aW9uX2xvbmcuY3N2IikgJT4lCiAgbXV0YXRlKGN0cnkgPSBmYWN0b3IoY3RyeSwgCiAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygidXMiLCAiZ2hhbmEiLCAidGhhaWxhbmQiLCAiY2hpbmEiLCAidmFudWF0dSIpKSkKZF9sb25nX3N1YnNjYWxlIDwtIHJlYWRfY3N2KCIuL3BhY2tldHMxMjNfZGF0YV9ieXN1YnNjYWxlX2xvbmcuY3N2IikgJT4lCiAgbXV0YXRlKGN0cnkgPSBmYWN0b3IoY3RyeSwgCiAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygidXMiLCAiZ2hhbmEiLCAidGhhaWxhbmQiLCAiY2hpbmEiLCAidmFudWF0dSIpKSkKCiMgbWFrZSBjdXN0b20gZnVuY3Rpb25zCnJvdW5kMiA8LSBmdW5jdGlvbih4KSB7Zm9ybWF0KHJvdW5kKHgsIDIpLCBkaWdpdHMgPSAyKX0KYGBgCgpUaGlzIGlzIGEgZG9jdW1lbnQgZGVzY3JpYmluZyBLYXJhJ3MgaW5pdGlhbCBleHBsb3JhdGlvbiBvZiB0aGUgZGF0YSBmcm9tIFBhY2tldHMgMS0zLiAKClRoZXNlIHBhY2tldHMgaW5jbHVkZWQgYHIgbGVuZ3RoKGxldmVscyhmYWN0b3IoZF9sb25nX3N1YnNjYWxlJHN1YnNjYWxlKSkpIC0gMWAgc2NhbGVzIG9yIHN1YnNjYWxlcywgaW5jbHVkaW5nIHRoZSBmb2xsb3dpbmc6CgotICoqQWJzb3JwdGlvbioqIChUZWxsZWdlbik7IHJhbmdlOiAwIHRvIDM0Ci0gKipBYnNvcnB0aW9uIGV4dHJhKiogKGEgaGFuZGZ1bCBvZiBleHRyYSBxdWVzdGlvbnMgZXh0cmEgcXVlc3Rpb25zKTsgcmFuZ2U6IDAgdG8gNAotICoqRGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzICMxLTQqKiAoVW5kZXJ3b29kICYgVGVyZXNpKTsgcmFuZ2U6IDAgdG8gMjAKLSAqKkRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlcyAjNS0xNCoqIChVbmRlcndvb2QgJiBUZXJlc2kpOyByYW5nZTogMCB0byA1MAotICoqRGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzICM1LTE0IChUaGFpKSoqIChhZGRpdGlvbmFsIHF1ZXN0aW9ucyBhc2tlZCBvbmx5IGluIFRoYWlsYW5kKTsgcmFuZ2U6IDAgdG8gNjAKLSAqKkRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlcyAjMTUtMTYqKiAoVW5kZXJ3b29kICYgVGVyZXNpKTsgcmFuZ2U6IDAgdG8gMTAKLSAqKkRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlcyAjMTUtMTYgKFRoYWkpKiogKGFkZGl0aW9uYWwgcXVlc3Rpb25zIGFza2VkIG9ubHkgaW4gVGhhaWxhbmQpOyByYW5nZTogMCB0byAzMAotICoqU3Bpcml0dWFsIGV2ZW50cyoqIChMdWhybWFubik7IHJhbmdlOiAwIHRvIDg4Ci0gKipTZW5zb3J5IHNlZWtpbmcqKiAoQnJvd24gZXQgYWwuKTsgcmFuZ2U6IC0yOCB0byAyOAotICoqQm9keSBhd2FyZW5lc3MqKiAoU2hpZWxkcyBldCBhbC4pOyByYW5nZTogLTM2IHRvIDM2Ci0gKipBdHRlbnRpb24gdG8gZmVlbGluZ3MqKiAoU2Fsb3ZleSBldCBhbC4pOyByYW5nZTogLTQyIHRvIDQyCi0gKipIYWxsdWNpbmF0aW9uKiogKEFsZGVyc29uLURheSk7IHJhbmdlOiAwIHRvIDI3Ci0gKipWSVNROiBkaWFsb2dpYyBzcGVlY2gqKiAoTWNDYXJ0aHktSm9uZXMgJiBGZXJueWhvdWdoKTsgcmFuZ2U6IC04IHRvIDgKLSAqKlZJU1E6IGlubmVyIHNwZWVjaCoqIChNY0NhcnRoeS1Kb25lcyAmIEZlcm55aG91Z2gpOyByYW5nZTogLTEwIHRvIDEwCi0gKipWSVNROiBldmFsdWF0aXZlL21vdGl2YXRpb25hbCBzcGVlY2gqKiAoTWNDYXJ0aHktSm9uZXMgJiBGZXJueWhvdWdoKTsgcmFuZ2U6IC04IHRvIDgKLSAqKklubmVyIHNwZWVjaCoqIChIYXJkeS9CZW50YWxsKTsgcmFuZ2U6IC0yMCB0byAyMAotICoqSGVhcmluZyBldmVudHMqKiAoUG9zZXkgJiBMb3NjaCk7IHJhbmdlOiAwIHRvIDE4Ci0gKipFbmNvZGluZyBzdHlsZSoqIChMZXdpY2tpKTsgcmFuZ2U6IDAgdG8gNDAKLSAqKk1pbmQgbWV0YXBob3JzKiogKFZhbiBFbGspOyByYW5nZTogLTE2IHRvIDE2Ci0gKipNZXRhY29nbml0aW9uOiBsYWNrIG9mIGNvZ25pdGl2ZSBjb25maWRlbmNlKiogKFdlbGxzIGV0IGFsLik7IHJhbmdlOiAtMTIgdG8gMTIKLSAqKk1ldGFjb2duaXRpb246IHBvc2l0aXZlIGJlbGllZnMgcmU6IHdvcnJ5aW5nKiogKFdlbGxzIGV0IGFsLik7IHJhbmdlOiAtMTIgdG8gMTIKLSAqKk1ldGFjb2duaXRpb246IGNvZ25pdGl2ZSBzZWxmLWNvbnNjaW91c25lc3MqKiAoV2VsbHMgZXQgYWwuKTsgcmFuZ2U6IC0xMiB0byAxMgotICoqTWV0YWNvZ25pdGlvbjogdW5jb250cm9sbGFiaWxpdHkvZGFuZ2VyKiogKFdlbGxzIGV0IGFsLik7IHJhbmdlOiAtMTIgdG8gMTIKLSAqKk1ldGFjb2duaXRpb246IG5lZWQgdG8gY29udHJvbCB0aG91Z2h0cyoqIChXZWxscyBldCBhbC4pOyByYW5nZTogLTEyIHRvIDEyCi0gKipEdWFsaXNtOiBtZW50YWwgc3RhdGVzKiogKFdlaXNtYW4pOyByYW5nZTogMCB0byA4Ci0gKipEdWFsaXNtOiBsaWZlIGV2ZW50cyoqIChXZWlzbWFuKTsgcmFuZ2U6IDAgdG8gNQotICoqRHVhbGlzbTogaW5hbmltYXRlIGNvbnNjaW91c25lc3MqKiAoV2Vpc21hbik7IHJhbmdlOiAwIHRvIDYKLSAqKkR1YWxpc206IG1pbmRzLCBzZWx2ZXMsICYgd29ybGQqKiAoV2Vpc21hbik7IHJhbmdlOiAwIHRvIDkKLSAqKkR1YWxpc206IGVwaXN0ZW1vbG9neSoqIChXZWlzbWFuKTsgcmFuZ2U6IDAgdG8gNQoKIyBNZWFucyBieSBzaXRlCgpGaXJzdCwgbGV0J3MgY29tcGFyZSB0aGUgbWVhbiByZXNwb25zZXMgdG8gZWFjaCBzdWJzY2FsZSBhY3Jvc3MgdGhlIDUgc2l0ZXMuIEknbGwgcGxvdCBlYWNoIHN1YnNjYWxlIGluIGEgc2VwYXJhdGUgbWluaS1wbG90IChkZW5vdGVkIGluIHRoZSB0aXRsZSBvZiBlYWNoIG1pbmktcGxvdCkuIFRoZSB4LWF4aXMgYW5kIGNvbG9yIGRlbm90ZSB0aGUgc2l0ZSAoVVMsIEdoYW5hLCBUaGFpbGFuZCwgQ2hpbmEsIG9yIFZhbnVhdHUpLiBOb3RlIHRoZSB0aGUgcmFuZ2UgeS1heGlzIHZhcmllcyBiZXR3ZWVuIG1pbmktcGxvdHMuIFRoZSBkb3Qgc2hvd3Mgd2hhdCB0aGUgbWVhbiByZXNwb25zZSB3YXMgZm9yIHRoYXQgc3Vic2NhbGUgZm9yIHRoYXQgc2l0ZSwgYW5kIHRoZSBlcnJvciBiYXJzIHNob3cgYSA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbCBmb3IgdGhhdCBtZWFuLiAKCmBgYHtyfQpkX2xvbmdfc3Vic2NhbGVfYm9vdCA8LSBkX2xvbmdfc3Vic2NhbGUgJT4lCiAgZmlsdGVyKCFpcy5uYShzdW1fc2NvcmUpKSAlPiUKICBncm91cF9ieShjdHJ5LCBwYWNrZXQsIHN1YnNjYWxlKSAlPiUKICBkbyhkYXRhLmZyYW1lKHJiaW5kKHNtZWFuLmNsLmJvb3QoLiRzdW1fc2NvcmUpKSkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBmaWx0ZXIoc3Vic2NhbGUgIT0gImF0dG4iKSAlPiUKICBsZWZ0X2pvaW4oZF9sb25nX3N1YnNjYWxlICU+JQogICAgICAgICAgICAgIGZpbHRlcighaXMubmEoc3VtX3Njb3JlKSkgJT4lCiAgICAgICAgICAgICAgY291bnQoY3RyeSwgcGFja2V0LCBzdWJzY2FsZSkpICU+JQogIG11dGF0ZShwYWNrZXQgPSBwYXN0ZSgicGFja2V0IiwgcGFja2V0KSwKICAgICAgICAgY3RyeSA9IGZhY3RvcihjdHJ5LAogICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoInVzIiwgImdoYW5hIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGhhaWxhbmQiLCAiY2hpbmEiLCAidmFudWF0dSIpKSwKICAgICAgICAgc3Vic2NhbGUgPSAKICAgICAgICAgICBmYWN0b3Ioc3Vic2NhbGUsCiAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoImV4d2wiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXh3bF9leHRyYSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRzZV8xdG80IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRzZV81dG8xNCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkc2VfNXRvMTRfdGhhaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRzZV8xNXRvMTYiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZHNlXzE1dG8xNl90aGFpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3BldiIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZW5fc2Vuc29yeV9zZWVraW5nIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlbl9ib2R5X2F3YXJlbmVzcyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZW5fdHJhaXRfbWV0YW1vb2QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoZXIyX2hhbGx1Y2luYXRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZvX1ZJU1FfZGlhbG9naWNfc3BlZWNoIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludm9fVklTUV9pbm5lcl9zcGVlY2giLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZvX1ZJU1FfZXZhbF9tb3Rpdl9pbm5lcl9zcGVlY2giLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZvX2hhcmR5X2JlbnRhbGwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoZXJfcG9zZXlfbG9zY2giLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbmNvX2xld2lja2kiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZXRhX3Zhbl9lbGsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0YXRfY29uZmlkZW5jZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRhdF9wb3NpdGl2ZV9iZWxpZWZzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGF0X2NvZ25pdGl2ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRhdF91bmNvbnRyb2xsYWJpbGl0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRhdF9uZWVkX2NvbnRyb2wiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtaW53X21lbnRhbF9zdGF0ZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtaW53X2xpZmVfZXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWlud19pbmFuaW1hdGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtaW53X3NlbHZlc19zb3Vsc193b3JsZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1pbndfZXBpc3RlbWljIiksCiAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoImFic29ycHRpb24gKHRlbGxlZ2VuKSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnNvcnB0aW9uIChleHRyYSkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMgKCMxLTQpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzICgjNS0xNCkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMgKCM1LTE0IHRoYWkpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzICgjMTUtMTYpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzICgjMTUtMTYgdGhhaSkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcGlyaXR1YWwgZXZlbnRzIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlbnNvcnkgc2Vla2luZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJvZHkgYXdhcmVuZXNzIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImF0dGVudGlvbiB0byBmZWVsaW5ncyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhbGx1Y2luYXRpb24iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVklTUTogZGlhbG9naWMgc3BlZWNoIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVklTUTogaW5uZXIgc3BlZWNoIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVklTUTogZXZhbHVhdGl2ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlubmVyIHNwZWVjaCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhlYXJpbmcgZXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZW5jb2Rpbmcgc3R5bGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtaW5kIG1ldGFwaG9ycyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1ldGFjb2cuOiBsYWNrIG9mIGNvZ25pdGl2ZSBjb25maWRlbmNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWV0YWNvZy46IHBvc2l0aXZlIGJlbGllZnMgcmU6IHdvcnJ5aW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWV0YWNvZy46IGNvZ25pdGl2ZSBzZWxmLWNvbnNjaW91c25lc3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZXRhY29nLjogdW5jb250cm9sbGFiaWxpdHkvZGFuZ2VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWV0YWNvZy46IG5lZWQgdG8gY29udHJvbCB0aG91Z2h0cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImR1YWxpc206IG1lbnRhbCBzdGF0ZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkdWFsaXNtOiBsaWZlIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImR1YWxpc206IGluYW5pbWF0ZSBjb25zY2lvdXNuZXNzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZHVhbGlzbTogbWluZHMsIHNlbHZlcywgJiB3b3JsZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImR1YWxpc206IGVwaXN0ZW1vbG9neSIpKSkKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNSwgZmlnLmFzcCA9IDR9CmdncGxvdChkX2xvbmdfc3Vic2NhbGVfYm9vdCAlPiUKICAgICAgICAgbXV0YXRlKHN1YnNjYWxlID0gCiAgICAgICAgICAgICAgICAgIGZhY3RvcihzdWJzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IAogICAgICAgICAgICAgICAgICAgICAgICAgICBjKCJhYnNvcnB0aW9uXG4odGVsbGVnZW4pXG5yYW5nZTogMCB0byAzNCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFic29ycHRpb25cbihleHRyYSlcbnJhbmdlOiAwIHRvIDQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXNcbih1bmRlcndvb2QgJiB0ZXJlc2k7ICMxLTQpXG5yYW5nZTogMCB0byAyMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlc1xuKHVuZGVyd29vZCAmIHRlcmVzaTsgIzUtMTQpXG5yYW5nZTogMCB0byA1MCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlc1xuKGFkZCdsIHRoYWkgdmVyc2lvbnMgZm9yICM1LTE0KVxucmFuZ2U6IDAgdG8gNjAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXNcbih1bmRlcndvb2QgJiB0ZXJlc2k7ICMxNS0xNilcbnJhbmdlOiAwIHRvIDEwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzXG4oYWRkJ2wgdGhhaSB2ZXJzaW9ucyBmb3IgIzE1LTE2KVxucmFuZ2U6IDAgdG8gMzAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcGlyaXR1YWwgZXZlbnRzXG4obHVocm1hbm4pXG5yYW5nZTogMCB0byA4OCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlbnNvcnkgc2Vla2luZ1xuKGJyb3duIGV0IGFsLilcbnJhbmdlOiAtMjggdG8gMjgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJib2R5IGF3YXJlbmVzc1xuKHNoaWVsZHMgZXQgYWwuKVxucmFuZ2U6IC0zNiB0byAzNiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImF0dGVudGlvbiB0byBmZWVsaW5nc1xuKHNhbG92ZXkgZXQgYWwuKVxucmFuZ2U6IC00MiB0byA0MiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhbGx1Y2luYXRpb25cbihhbGRlcnNvbi1kYXkpXG5yYW5nZTogMCB0byAyNyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlZJU1E6IGRpYWxvZ2ljIHNwZWVjaFxuKG1jY2FydGh5LWpvbmVzICYgZmVybnlob3VnaClcbnJhbmdlOiAtOCB0byA4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVklTUTogaW5uZXIgc3BlZWNoXG4obWNjYXJ0aHktam9uZXMgJiBmZXJueWhvdWdoKVxucmFuZ2U6IC0xMCB0byAxMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlZJU1E6IGV2YWx1YXRpdmUvbW90aXZhdGlvbmFsIHNwZWVjaFxuKG1jY2FydGh5LWpvbmVzICYgZmVybnlob3VnaClcbnJhbmdlOiAtOCB0byA4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5uZXIgc3BlZWNoXG4oaGFyZHkvYmVudGFsbClcbnJhbmdlOiAtMjAgdG8gMjAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoZWFyaW5nIGV2ZW50c1xuKHBvc2V5ICYgbG9zY2gpXG5yYW5nZTogMCB0byAxOCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVuY29kaW5nIHN0eWxlXG4obGV3aWNraSlcbnJhbmdlOiAwIHRvIDQwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWluZCBtZXRhcGhvcnNcbih2YW4gZWxrKVxucmFuZ2U6IC0xNiB0byAxNiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1ldGFjb2cuOiBsYWNrIG9mIGNvZ25pdGl2ZSBjb25maWRlbmNlXG4od2VsbHMgZXQgYWwuKVxucmFuZ2U6IC0xMiB0byAxMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1ldGFjb2cuOiBwb3NpdGl2ZSBiZWxpZWZzIHJlOiB3b3JyeWluZ1xuKHdlbGxzIGV0IGFsLilcbnJhbmdlOiAtMTIgdG8gMTIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZXRhY29nLjogY29nbml0aXZlIHNlbGYtY29uc2Npb3VzbmVzc1xuKHdlbGxzIGV0IGFsLilcbnJhbmdlOiAtMTIgdG8gMTIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZXRhY29nLjogdW5jb250cm9sbGFiaWxpdHkvZGFuZ2VyXG4od2VsbHMgZXQgYWwuKVxucmFuZ2U6IC0xMiB0byAxMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1ldGFjb2cuOiBuZWVkIHRvIGNvbnRyb2wgdGhvdWdodHNcbih3ZWxscyBldCBhbC4pXG5yYW5nZTogLTEyIHRvIDEyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZHVhbGlzbTogbWVudGFsIHN0YXRlc1xuKHdlaXNtYW4pXG5yYW5nZTogMCB0byA4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZHVhbGlzbTogbGlmZSBldmVudHNcbih3ZWlzbWFuKVxucmFuZ2U6IDAgdG8gNSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImR1YWxpc206IGluYW5pbWF0ZSBjb25zY2lvdXNuZXNzXG4od2Vpc21hbilcbnJhbmdlOiAwIHRvIDYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkdWFsaXNtOiBtaW5kcywgc2VsdmVzLCAmIHdvcmxkXG4od2Vpc21hbilcbnJhbmdlOiAwIHRvIDkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkdWFsaXNtOiBlcGlzdGVtb2xvZ3lcbih3ZWlzbWFuKVxucmFuZ2U6IDAgdG8gNSIpKSkgJT4lCiAgICAgICAgICMgZmlsdGVyKCFncmVwbCgidGhhaSIsIHN1YnNjYWxlKSkgJT4lICMgZ2V0IHJpZCBvZiB0aGFpLW9ubHkgc2NhbGVzCiAgICAgICAgIG11dGF0ZShwYWNrZXQgPSBnc3ViKCJwYWNrZXQgIiwgIlAiLCBwYWNrZXQpKSwKICAgICAgIGFlcyh4ID0gY3RyeSwgeSA9IE1lYW4sIGNvbG9yID0gY3RyeSkpICsKICBmYWNldF93cmFwKH4gcmVvcmRlcihpbnRlcmFjdGlvbihwYWNrZXQsIHN1YnNjYWxlLCBzZXAgPSAiOiAiKSwKICAgICAgICAgICAgICAgICAgICAgICBhcy5udW1lcmljKGZhY3RvcihwYWNrZXQpKSksCiAgICAgICAgICAgICBuY29sID0gMywgc2NhbGVzID0gImZyZWUiKSArCiAgZ2VvbV9wb2ludHJhbmdlKGFlcyh5bWluID0gTG93ZXIsIHltYXggPSBVcHBlcikpICsKICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcGFzdGUwKCIobj0iLCBuLCAiKSIpLCB5ID0gTG93ZXIpLCAKICAgICAgICAgICAgc2l6ZSA9IDIsIG51ZGdlX3ggPSAwLjE1LCBoanVzdCA9IDApICsKICBzY2FsZV94X2Rpc2NyZXRlKGV4cGFuZCA9IGMoMCwgMSkpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIGhqdXN0ID0gMSksCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gInRvcCIpICsKICBsYWJzKHRpdGxlID0gIm1lYW4gc3Vic2NhbGUgc2NvcmVzIGJ5IHNpdGUiLAogICAgICAgc3VidGl0bGUgPSAib3JkZXJlZCBieSBwYWNrZXQgKFAxLCBQMiwgUDMpXG5lcnJvciBiYXJzIGFyZSBib290c3RyYXBwZWQgOTUlIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIiwKICAgICAgIHggPSAic2l0ZSIsIGNvbG9yID0gInNpdGUiLAogICAgICAgeSA9ICJtZWFuIHN1YnNjYWxlIHNjb3JlIChyYW5nZSB2YXJpZXMgYnkgc3Vic2NhbGUpIikKYGBgCgojIENsdXN0ZXIgYW5hbHlzaXMKCmBgYHtyfQpjb3JfYnlfc2l0ZSA8LSBkX2xvbmdfc3Vic2NhbGVfYm9vdCAlPiUKICBmaWx0ZXIoIWdyZXBsKCJ0aGFpIiwgc3Vic2NhbGUpKSAlPiUgCiAgbXV0YXRlKHN1YnNjYWxlID0gaWZlbHNlKHN1YnNjYWxlID09ICJpbm5lciBzcGVlY2giLAogICAgICAgICAgICAgICAgICAgICAgICAgICBwYXN0ZShhcy5jaGFyYWN0ZXIoc3Vic2NhbGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3ViKCJwYWNrZXQgIiwgInAiLCBwYWNrZXQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXAgPSAiXyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBhcy5jaGFyYWN0ZXIoc3Vic2NhbGUpKSkgJT4lCiAgZGlzdGluY3QoY3RyeSwgc3Vic2NhbGUsIE1lYW4pICU+JQogIGZpbHRlcihzdWJzY2FsZSAhPSAiaW5uZXIgdm9pY2UiKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgc3ByZWFkKHN1YnNjYWxlLCBNZWFuKSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgY29sdW1uX3RvX3Jvd25hbWVzKCJjdHJ5IikKYGBgCgojIyAuLi4gb2Ygc2l0ZXMKCk5vdyBsZXQncyB0cnkgYSBmb3JtYWwgYW5hbHlzaXMgZm9yIGRldGVybWluaW5nIGhvdyBzaW1pbGFyIHRoZXNlIDUgc2l0ZXMgYXJlIHRvIGVhY2ggb3RoZXIuIAoKSGllcmFyY2hpY2FsIGNsdXN0ZXJpbmcgYmFzaWNhbGx5IHdvcmtzIGxpa2UgdGhpczogSWYgdGhlcmUgYXJlIDUgdGhpbmdzIC0gQSwgQiwgQywgRCwgYW5kIEUgLSB0aGlzIGFuYWx5c2lzIHdpbGwgdHJ5IHRvIGdyb3VwIHBhaXJzIG9mIGxpa2UgdGhpbmdzIHRvZ2V0aGVyLiBFLmcuLCBmaXJzdCBpdCBtaWdodCBwYWlyIEEgYW5kIEQgdG9nZXRoZXIsIHRoZW4gaXQgd2lsbCBwcmV0ZW5kIHRoYXQgdGhlcmUgYXJlIGp1c3QgNCB0aGluZ3MgLSBBRCwgQiwgQywgYW5kIEUuIFRoZW4gaXQgbWlnaHQgcGFpciBCIGFuZCBDIHRvZ2V0aGVyLCBhbmQgdGhlbiBwcmV0ZW5kIHRoYXQgdGhlcmUgYXJlIGp1c3QgMyB0aGluZ3MgLSBBRCwgQkMsIGFuZCBFLiBUaGVuIGl0IG1pZ2h0IHBhaXIgQUQgYW5kIEJDIHRvZ2V0aGVyLCBhbmQgdGhlbiBwcmV0ZW5kIHRoYXQgdGhlcmUgYXJlIGp1c3QgMiB0aGluZ3M6IEFEQkMgYW5kIEUuIEl0IHdpbGwgZG8gdGhpcyB1bnRpbCB0aGVyZSBpcyBqdXN0IG9uZSAidGhpbmciIGxlZnQuCgpTbyB0byByZWFkIHRoaXMgcGxvdCwgbG9vayBmb3IgdGhlIHBhaXJpbmdzLiBTaXRlcyB0aGF0IGFyZSBvbiB0aGUgc2FtZSAiYnJhbmNoIiBpbiB0aGlzICJkZW5kcm9ncmFtIiBzaG93ZWQgc2ltaWxhciBwYXR0ZXJucyBvZiBtZWFucyBvbiB0aGUgc3Vic2NhbGVzLiBUaGUgY2xvc2VyIHRvZ2V0aGVyIHRoZXkgYXJlIG9uIHRoYXQgYnJhbmNoLCB0aGUgbW9yZSBzaW1pbGFyIHRoZXkgd2VyZS4KCmBgYHtyLCBmaWcud2lkdGggPSAyLCBmaWcuYXNwID0gMC42fQpjbHVzdF9zaXRlcyA8LSBoY2x1c3QoZGlzdChjb3JfYnlfc2l0ZSkpCmdnZGVuZHJvZ3JhbShjbHVzdF9zaXRlcykgKwogIGxhYnModGl0bGUgPSAiaGllcmFyY2hpY2FsIGNsdXN0ZXJpbmcgb2Ygc2l0ZXMiLAogICAgICAgc3VidGl0bGUgPSAidXNpbmcgbWVhbiBzdWJzY2FsZSBzY29yZXMgYnkgc2l0ZSIpCmBgYAoKIyMgLi4uIG9mIHN1YnNjYWxlcwoKTm93IGxldCdzIGRvIHRoZSBzYW1lIHRoaW5nIGZvciB0aGUgc3Vic2NhbGVzOiBXaGljaCBzdWJzY2FsZXMgImhhbmcgdG9nZXRoZXIiPyAKClRvIHJlYWQgdGhpcyBwbG90LCBhZ2FpbiwgbG9vayBmb3IgdGhlIHBhaXJpbmdzLiBTdWJzY2FsZXMgdGhhdCBhcmUgb24gdGhlIHNhbWUgImJyYW5jaCIgaW4gdGhpcyAiZGVuZHJvZ3JhbSIgc2hvd2VkIHNpbWlsYXIgcGF0dGVybnMgb2YgbWVhbnMgYWNyb3NzIHRoZSA1IHNpdGVzLiBUaGUgY2xvc2VyIHRvZ2V0aGVyIHRoZXkgYXJlIG9uIHRoYXQgYnJhbmNoLCB0aGUgbW9yZSBzaW1pbGFyIHRoZXkgd2VyZS4KCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42fQpjbHVzdF9zdWJzY2FsZXMgPC0gaGNsdXN0KGRpc3QodChjb3JfYnlfc2l0ZSkpKQpnZ2RlbmRyb2dyYW0oY2x1c3Rfc3Vic2NhbGVzKSArCiAgbGFicyh0aXRsZSA9ICJoaWVyYXJjaGljYWwgY2x1c3RlciBvZiBzdWJzY2FsZXMiLAogICAgICAgc3VidGl0bGUgPSAidXNpbmcgbWVhbiBzdWJzY2FsZSBzY29yZXMgYnkgc2l0ZSIpCmBgYAoKIyBMb29rIGF0IGNvcnJlbGF0aW9ucyBhbW9uZyBzdWJzY2FsZXMgYnkgc2l0ZQoKTm93IGxldCdzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB3aGljaCBzdWJzY2FsZXMgc2VlbSB0byAiaGFuZyB0b2dldGhlciwiIGJ5IGxvb2tpbmcgYXQgdGhlIGNvcnJlbGF0aW9ucyBiZXR3ZWVuIHNjYWxlcyBpbiB0aGVpciBtZWFucyBmb3IgZWFjaCBzaXRlLiAKClRvIHJlYWQgdGhpcyBwbG90LCBmaW5kIG9uZSBzY2FsZSBvbiB0aGUgeC1heGlzLCBhbmQgYW5vdGhlciBzY2FsZSBvbiB0aGUgeS1heGlzLiBUaGUgdmFsdWUgKGFuZCBjb2xvcikgYXQgdGhhdCBwb2ludCBpbiB0aGUgZ3JpZCBzaG93cyB5b3UgdGhlIGNvcnJlbGF0aW9uIGJldHdlZW4gdGhlc2UgdHdvIHN1YnNjYWxlIG1lYW5zIGFjcm9zcyB0aGUgNSBzaXRlcy4gVGhlIG1heGltdW0gcG9zc2libGUgY29ycmVsYXRpb24gaXMgKzEgKHJlZCksIGFuZCB0aGUgbWluaW11bSBpcyAtMSAoYmx1ZSkuCgpJIG9yZGVyZWQgdGhlIHNjYWxlcyBhY2NvcmRpbmcgdG8gdGhlIGNsdXN0ZXIgYW5hbHlzaXMgd2UganVzdCBkaWQgYWJvdmUsIHNvIHlvdSBjYW4gc2VlICJwYXRjaGVzIiBvZiBzY2FsZXMgdGhhdCBhbGwgdGVuZGVkIHRvIGhhdmUgc2ltaWxhciBwYXR0ZXJucyBvZiBtZWFucyBhY3Jvc3Mgc2l0ZXMuCgpgYGB7ciwgZmlnLndpZHRoID0gNywgZmlnLmFzcCA9IDF9CmRfbG9uZ19zdWJzY2FsZV9ib290ICU+JQogIGZpbHRlcighZ3JlcGwoInRoYWkiLCBzdWJzY2FsZSkpICU+JSAKICBtdXRhdGUoc3Vic2NhbGUgPSBpZmVsc2Uoc3Vic2NhbGUgPT0gImlubmVyIHNwZWVjaCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlKGFzLmNoYXJhY3RlcihzdWJzY2FsZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzdWIoInBhY2tldCAiLCAicCIsIHBhY2tldCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcCA9ICJfIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzLmNoYXJhY3RlcihzdWJzY2FsZSkpKSAlPiUKICBkaXN0aW5jdChjdHJ5LCBzdWJzY2FsZSwgTWVhbikgJT4lCiAgdW5ncm91cCgpICU+JQogIHNwcmVhZChzdWJzY2FsZSwgTWVhbikgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIGNvbHVtbl90b19yb3duYW1lcygiY3RyeSIpICU+JQogIGNvcih1c2UgPSAicGFpcndpc2UuY29tcGxldGUub2JzIikgJT4lCiAgIyBjb3JycGxvdCB2ZXJzaW9uOgogICMgY29ycnBsb3Q6OmNvcnJwbG90KG1ldGhvZCA9ICJjb2xvciIsIHRsLmNvbCA9ICJibGFjayIsCiAgIyAgICAgICAgICAgICAgICAgICAgYWRkQ29lZi5jb2wgPSAiYmxhY2siLCBvcmRlciA9ICJoY2x1c3QiLAogICMgICAgICAgICAgICAgICAgICAgIGNvbCA9IFJDb2xvckJyZXdlcjo6YnJld2VyLnBhbChuID0gMTEsIG5hbWUgPSAiUFJHbiIpLAogICMgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIlxuY29ycmVsYXRpb25zIGJldHdlZW4gc3Vic2NhbGUgbWVhbnMgKGJ5IGNvdW50cnkpLCBvcmRlcmVkIGJ5IGhpZXJhcmNoaWNhbCBjbHVzdGVyaW5nIikKCiAgIyBnZ3Bsb3QgdmVyc2lvbjoKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJzdWJzY2FsZUEiKSAlPiUKICBtdXRhdGUoc3Vic2NhbGVBX29yZGVyID0gYXMubnVtZXJpYyhmYWN0b3IoYXMubnVtZXJpYyhmYWN0b3Ioc3Vic2NhbGVBKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGNsdXN0X3N1YnNjYWxlcyRvcmRlcikpKSAlPiUKICBnYXRoZXIoc3Vic2NhbGVCLCBjb3IsIC1zdWJzY2FsZUEsIC1zdWJzY2FsZUFfb3JkZXIpICU+JQogIG11dGF0ZShzdWJzY2FsZUJfb3JkZXIgPSBhcy5udW1lcmljKGZhY3Rvcihhcy5udW1lcmljKGZhY3RvcihzdWJzY2FsZUIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gY2x1c3Rfc3Vic2NhbGVzJG9yZGVyKSkpICU+JQogIGdncGxvdChhZXMoeCA9IHJlb3JkZXIoc3Vic2NhbGVBLCBkZXNjKHN1YnNjYWxlQV9vcmRlcikpLCAKICAgICAgICAgICAgIHkgPSByZW9yZGVyKHN1YnNjYWxlQiwgZGVzYyhzdWJzY2FsZUJfb3JkZXIpKSwgCiAgICAgICAgICAgICBmaWxsID0gY29yLCBsYWJlbCA9IHJvdW5kMihjb3IpKSkgKwogIGdlb21fdGlsZSgpICsKICBnZW9tX3RleHQoc2l6ZSA9IDMpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihndWlkZSA9IGd1aWRlX2NvbG9yYmFyKGJhcmhlaWdodCA9IDUwKSwKICAgICAgICAgICAgICAgICAgICAgICBwYWxldHRlID0gIlJkWWxCdSIsIGxpbWl0cyA9IGMoLTEsIDEpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCBoanVzdCA9IDEpKSArCiAgbGFicyh0aXRsZSA9ICJjb3JyZWxhdGlvbnMgYW1vbmcgbWVhbiBzdWJzY2FsZSBzY29yZXMsIGJ5IHNpdGUiLAogICAgICAgc3VidGl0bGUgPSAidXNpbmcgcGFpcndpc2UgY29tcGxldGUgb2JzZXJ2YXRpb25zXG5vcmRlcmVkIHZpYSBoaWVyYXJjaGljYWwgY2x1c3RlcmluZyBhbmFseXNpcyIsCiAgICAgICBmaWxsID0gImNvcnJlbGF0aW9uXG5jb2VmZi4gKHIpIiwKICAgICAgIHggPSAiIiwKICAgICAgIHkgPSAiIikKYGBgCgojIExvb2sgYXQgY29ycmVsYXRpb25zIGFtb25nIHN1YnNjYWxlcyBieSBpbmRpdmlkdWFscwoKV2UgY291bGQgZG8gdGhlIHNhbWUgdGhpbmcgdGhpbmtpbmcgYWJvdXQgaW5kaXZpZHVhbCBwYXJ0aWNpcGFudHMgaW5zdGVhZCBvZiBzaXRlcyAtIGJ1dCBpdCdzIGltcG9ydGFudCB0byBrZWVwIGluIG1pbmQgdGhhdCBtb3N0IHBlb3BsZSBkaWRuJ3QgZmlsbCBvdXQgYWxsIGByIGxlbmd0aChsZXZlbHMoZmFjdG9yKGRfbG9uZ19zdWJzY2FsZSRzdWJzY2FsZSkpKSAtIDFgIHN1YnNjYWxlcyEgU28gd2UnbGwgZm9jdXMgb24ganVzdCBsb29raW5nIGF0IGhvdyB0aGUgc3Vic2NhbGVzIHdpdGhpbiBlYWNoIHBhY2tldCAoUGFja2V0IDEsIDIsIG9yIDMpICJoYW5nIHRvZ2V0aGVyIiBmb3IgdGhlIHBlb3BsZSB3aG8gY29tcGxldGVkIHRoYXQgcGFja2V0LgoKQXMgYWJvdmUsIHRvIHJlYWQgdGhlc2UgcGxvdHMsIGZpbmQgb25lIHNjYWxlIG9uIHRoZSB4LWF4aXMsIGFuZCBhbm90aGVyIHNjYWxlIG9uIHRoZSB5LWF4aXMuIFRoZSB2YWx1ZSAoYW5kIGNvbG9yKSBhdCB0aGF0IHBvaW50IGluIHRoZSBncmlkIHNob3dzIHlvdSB0aGUgY29ycmVsYXRpb24gYmV0d2VlbiB0aGVzZSB0d28gc3Vic2NhbGUgbWVhbnMgYWNyb3NzIHRoZSA1IHNpdGVzLiBUaGUgbWF4aW11bSBwb3NzaWJsZSBjb3JyZWxhdGlvbiBpcyArMSAocmVkKSwgYW5kIHRoZSBtaW5pbXVtIGlzIC0xIChibHVlKS4gKE5vdGUgdGhhdCB0aGVzZSBzY2FsZXMgYXJlIGJlaW5nIHByZXNlbnRlZCBpbiBhbHBoYWJldGljYWwgb3JkZXIsICpub3QqIGJ5IGFueSBzb3J0IG9mIGNsdXN0ZXJpbmcgYW5hbHlzaXMuKQoKIyMgUGFja2V0IDEKCmBgYHtyIGZpZy53aWR0aCA9IDMsIGZpZy5hc3AgPSAxfQpkX2xvbmdfc3Vic2NhbGUgJT4lCiAgZmlsdGVyKHBhY2tldCA9PSAxLCAhaXMubmEoc3VtX3Njb3JlKSkgJT4lCiAgc3ByZWFkKHN1YnNjYWxlLCBzdW1fc2NvcmUpICU+JQogIHNlbGVjdCgtYyhjdHJ5LCB3aGVyLCByZWNyLCB3aG9jLCBhdHRuKSkgJT4lCiAgbXV0YXRlKHN1YmogPSBwYXN0ZShzdWJqLCBwYWNrZXQsIHZlcnNpb24sIHNlcCA9ICJfIikpICU+JQogIHNlbGVjdCgtcGFja2V0LCAtdmVyc2lvbikgJT4lCiAgZGlzdGluY3QoKSAlPiUKICByZW1vdmVfcm93bmFtZXMoKSAlPiUKICBjb2x1bW5fdG9fcm93bmFtZXMoInN1YmoiKSAlPiUKICBjb3IodXNlID0gInBhaXJ3aXNlLmNvbXBsZXRlLm9icyIpICU+JQogICMgY29ycnBsb3QgdmVyc2lvbjoKICAjIGNvcnJwbG90Ojpjb3JycGxvdChtZXRob2QgPSAiY29sb3IiLCB0bC5jb2wgPSAiYmxhY2siLAogICMgICAgICAgICAgICAgICAgICAgIGFkZENvZWYuY29sID0gImJsYWNrIiwgb3JkZXIgPSAiaGNsdXN0IiwKICAjICAgICAgICAgICAgICAgICAgICBjb2wgPSBSQ29sb3JCcmV3ZXI6OmJyZXdlci5wYWwobiA9IDExLCBuYW1lID0gIlBSR24iKSwKICAjICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJcblBBQ0tFVCAxOiBjb3JyZWxhdGlvbnMgYW1vbmcgc3Vic2NhbGVzIikKCiAgIyBnZ3Bsb3QgdmVyc2lvbjoKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJzdWJzY2FsZUEiKSAlPiUKICBnYXRoZXIoc3Vic2NhbGVCLCBjb3IsIC1zdWJzY2FsZUEpICU+JQogIGdncGxvdChhZXMoeCA9IHN1YnNjYWxlQSwgeSA9IHN1YnNjYWxlQiwgZmlsbCA9IGNvciwgbGFiZWwgPSByb3VuZDIoY29yKSkpICsKICBnZW9tX3RpbGUoKSArCiAgZ2VvbV90ZXh0KHNpemUgPSAzKSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIoZ3VpZGUgPSBndWlkZV9jb2xvcmJhcihiYXJoZWlnaHQgPSA2KSwKICAgICAgICAgICAgICAgICAgICAgICBwYWxldHRlID0gIlJkWWxCdSIsIGxpbWl0cyA9IGMoLTEsIDEpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCBoanVzdCA9IDEpKSArCiAgbGFicyh0aXRsZSA9ICJQQUNLRVQgMTogY29ycmVsYXRpb25zIGFtb25nIHN1YnNjYWxlcyIsCiAgICAgICBzdWJ0aXRsZSA9ICJ1c2luZyBwYWlyd2lzZSBjb21wbGV0ZSBvYnNlcnZhdGlvbnMiLAogICAgICAgeCA9ICIiLAogICAgICAgeSA9ICIiKQpgYGAKCiMjIFBhY2tldCAyCgpgYGB7ciBmaWcud2lkdGggPSAzLCBmaWcuYXNwID0gMX0KZF9sb25nX3N1YnNjYWxlICU+JQogIGZpbHRlcihwYWNrZXQgPT0gMiwgIWlzLm5hKHN1bV9zY29yZSkpICU+JQogIHNwcmVhZChzdWJzY2FsZSwgc3VtX3Njb3JlKSAlPiUKICBzZWxlY3QoLWMoY3RyeSwgd2hlciwgcmVjciwgd2hvYywgYXR0bikpICU+JQogIG11dGF0ZShzdWJqID0gcGFzdGUoc3ViaiwgcGFja2V0LCB2ZXJzaW9uLCBzZXAgPSAiXyIpKSAlPiUKICBzZWxlY3QoLXBhY2tldCwgLXZlcnNpb24pICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgcmVtb3ZlX3Jvd25hbWVzKCkgJT4lCiAgY29sdW1uX3RvX3Jvd25hbWVzKCJzdWJqIikgJT4lCiAgY29yKHVzZSA9ICJwYWlyd2lzZS5jb21wbGV0ZS5vYnMiKSAlPiUKICAjIGNvcnJwbG90IHZlcnNpb246CiAgIyBjb3JycGxvdDo6Y29ycnBsb3QobWV0aG9kID0gImNvbG9yIiwgdGwuY29sID0gImJsYWNrIiwKICAjICAgICAgICAgICAgICAgICAgICBhZGRDb2VmLmNvbCA9ICJibGFjayIsIG9yZGVyID0gImhjbHVzdCIsCiAgIyAgICAgICAgICAgICAgICAgICAgY29sID0gUkNvbG9yQnJld2VyOjpicmV3ZXIucGFsKG4gPSAxMSwgbmFtZSA9ICJQUkduIiksCiAgIyAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiXG5QQUNLRVQgMjogY29ycmVsYXRpb25zIGFtb25nIHN1YnNjYWxlcyIpCgogICMgZ2dwbG90IHZlcnNpb246CiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigic3Vic2NhbGVBIikgJT4lCiAgZ2F0aGVyKHN1YnNjYWxlQiwgY29yLCAtc3Vic2NhbGVBKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzdWJzY2FsZUEsIHkgPSBzdWJzY2FsZUIsIGZpbGwgPSBjb3IsIGxhYmVsID0gcm91bmQyKGNvcikpKSArCiAgZ2VvbV90aWxlKCkgKwogIGdlb21fdGV4dChzaXplID0gMykgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKGd1aWRlID0gZ3VpZGVfY29sb3JiYXIoYmFyaGVpZ2h0ID0gNiksCiAgICAgICAgICAgICAgICAgICAgICAgcGFsZXR0ZSA9ICJSZFlsQnUiLCBsaW1pdHMgPSBjKC0xLCAxKSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgaGp1c3QgPSAxKSkgKwogIGxhYnModGl0bGUgPSAiUEFDS0VUIDI6IGNvcnJlbGF0aW9ucyBhbW9uZyBzdWJzY2FsZXMiLAogICAgICAgc3VidGl0bGUgPSAidXNpbmcgcGFpcndpc2UgY29tcGxldGUgb2JzZXJ2YXRpb25zIiwKICAgICAgIHggPSAiIiwKICAgICAgIHkgPSAiIikKYGBgCgojIyBQYWNrZXQgMwoKYGBge3IgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDF9CmRfbG9uZ19zdWJzY2FsZSAlPiUKICBmaWx0ZXIocGFja2V0ID09IDMsICFpcy5uYShzdW1fc2NvcmUpKSAlPiUKICBzcHJlYWQoc3Vic2NhbGUsIHN1bV9zY29yZSkgJT4lCiAgc2VsZWN0KC1jKGN0cnksIHdoZXIsIHJlY3IsIHdob2MsIGF0dG4pKSAlPiUKICBtdXRhdGUoc3ViaiA9IHBhc3RlKHN1YmosIHBhY2tldCwgdmVyc2lvbiwgc2VwID0gIl8iKSkgJT4lCiAgc2VsZWN0KC1wYWNrZXQsIC12ZXJzaW9uKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIHJlbW92ZV9yb3duYW1lcygpICU+JQogIGNvbHVtbl90b19yb3duYW1lcygic3ViaiIpICU+JQogIGNvcih1c2UgPSAicGFpcndpc2UuY29tcGxldGUub2JzIikgJT4lCiAgIyBjb3JycGxvdCB2ZXJzaW9uOgogICMgY29ycnBsb3Q6OmNvcnJwbG90KG1ldGhvZCA9ICJjb2xvciIsIHRsLmNvbCA9ICJibGFjayIsCiAgIyAgICAgICAgICAgICAgICAgICAgYWRkQ29lZi5jb2wgPSAiYmxhY2siLCBvcmRlciA9ICJoY2x1c3QiLAogICMgICAgICAgICAgICAgICAgICAgIGNvbCA9IFJDb2xvckJyZXdlcjo6YnJld2VyLnBhbChuID0gMTEsIG5hbWUgPSAiUFJHbiIpLAogICMgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIlxuUEFDS0VUIDM6IGNvcnJlbGF0aW9ucyBhbW9uZyBzdWJzY2FsZXMiKQoKICAjIGdncGxvdCB2ZXJzaW9uOgogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInN1YnNjYWxlQSIpICU+JQogIGdhdGhlcihzdWJzY2FsZUIsIGNvciwgLXN1YnNjYWxlQSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc3Vic2NhbGVBLCB5ID0gc3Vic2NhbGVCLCBmaWxsID0gY29yLCBsYWJlbCA9IHJvdW5kMihjb3IpKSkgKwogIGdlb21fdGlsZSgpICsKICBnZW9tX3RleHQoc2l6ZSA9IDMpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihndWlkZSA9IGd1aWRlX2NvbG9yYmFyKGJhcmhlaWdodCA9IDYpLAogICAgICAgICAgICAgICAgICAgICAgIHBhbGV0dGUgPSAiUmRZbEJ1IiwgbGltaXRzID0gYygtMSwgMSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIGhqdXN0ID0gMSkpICsKICBsYWJzKHRpdGxlID0gIlBBQ0tFVCAzOiBjb3JyZWxhdGlvbnMgYW1vbmcgc3Vic2NhbGVzIiwKICAgICAgIHN1YnRpdGxlID0gInVzaW5nIHBhaXJ3aXNlIGNvbXBsZXRlIG9ic2VydmF0aW9ucyIsCiAgICAgICB4ID0gIiIsCiAgICAgICB5ID0gIiIpCmBgYAoKIyMgQWxsIHBhY2tldHMKCkp1c3QgZm9yIGZ1biwgaGVyZSdzIGEgbG9vayBhdCB0aGUgY29ycmVsYXRpb25zIGFtb25nIGluZGl2aWR1YWwgcGFydGljaXBhbnRzJyBzdWJzY2FsZSBzY29yZXMgYWNyb3NzIGFsbCBzY2FsZXMuICoqTm90ZSB0aGF0IHNvbWUgb2YgdGhlc2UgcGFpcnMgb2Ygc3Vic2NhbGVzIHByb2JhYmx5IGhhdmUgdmVyeSBmZXcgb2JzZXJ2YXRpb25zIGdvaW5nIGludG8gdGhlc2UgY29ycmVsYXRpb25zISEgU28gdGFrZSB0aGlzIHdpdGggYSBncmFpbiBvZiBzYWx0LioqCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDF9CmRfbG9uZ19zdWJzY2FsZSAlPiUKICBzcHJlYWQoc3Vic2NhbGUsIHN1bV9zY29yZSkgJT4lCiAgc2VsZWN0KC1jKGN0cnksIHdoZXIsIHJlY3IsIHdob2MsIGF0dG4pKSAlPiUKICBtdXRhdGUoc3ViaiA9IHBhc3RlKHN1YmosIHBhY2tldCwgdmVyc2lvbiwgc2VwID0gIl8iKSkgJT4lCiAgc2VsZWN0KC1wYWNrZXQsIC12ZXJzaW9uKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIHJlbW92ZV9yb3duYW1lcygpICU+JQogIGNvbHVtbl90b19yb3duYW1lcygic3ViaiIpICU+JQogIGNvcih1c2UgPSAicGFpcndpc2UuY29tcGxldGUub2JzIikgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigic3Vic2NhbGVBIikgJT4lCiAgZ2F0aGVyKHN1YnNjYWxlQiwgY29yLCAtc3Vic2NhbGVBKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzdWJzY2FsZUEsIHkgPSBzdWJzY2FsZUIsIGZpbGwgPSBjb3IsIGxhYmVsID0gcm91bmQyKGNvcikpKSArCiAgZ2VvbV90aWxlKCkgKwogIGdlb21fdGV4dChzaXplID0gMykgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKGd1aWRlID0gZ3VpZGVfY29sb3JiYXIoYmFyaGVpZ2h0ID0gNiksCiAgICAgICAgICAgICAgICAgICAgICAgcGFsZXR0ZSA9ICJSZFlsQnUiLCBsaW1pdHMgPSBjKC0xLCAxKSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgaGp1c3QgPSAxKSkgKwogIGxhYnModGl0bGUgPSAiUEFDS0VUUyAxLTM6IGNvcnJlbGF0aW9ucyBhbW9uZyBzdWJzY2FsZXMiLAogICAgICAgc3VidGl0bGUgPSAidXNpbmcgcGFpcndpc2UgY29tcGxldGUgb2JzZXJ2YXRpb25zIiwKICAgICAgIHggPSAiIiwKICAgICAgIHkgPSAiIikKYGBgCgojIEZvY3VzaW5nIG9uIGFic29ycHRpb24gJiBzcGlyaXR1YWwgZXZlbnRzCgpMZXQncyBsb29rIGF0IHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBhYnNvcnB0aW9uICYgc3Bpcml0dWFsIGV2ZW50cyBhY3Jvc3MgaW5kaXZpZHVhbCBwYXJ0aWNpcGFudHMsIGJ1dCBzZXBhcmF0aW5nIG91dCBieSBzaXRlLiBUYW55YSdzIHN0cm9uZyBwcmVkaWN0aW9uIHdvdWxkIGJlIHRoYXQgaGlnaGVyIGFic29ycHRpb24gKGFzIGNhcHR1cmVkIGJ5IHRoZSBUZWxsZWdlbiBzY2FsZSwgYGV4d2xgKSB3b3VsZCBiZSBjb3JyZWxhdGVkIHdpdGggbW9yZSBzcGlyaXR1YWwgZXZlbnRzIChhcyBpbmR4ZWQgYnkgdGhlIEx1aHJtYW5uIHNjYWxlLCBgc3BldmApLgoKSGVyZSdzIGEgdGVzdCBmb3IgdGhlIG92ZXJhbGwgY29ycmVsYXRpb246CgpgYGB7cn0KY29yMSA8LSB3aXRoKGRfd2lkZV9zdWJzY2FsZSwgY29yLnRlc3QoZXh3bCwgc3BldikpOyBjb3IxCmBgYAoKTG9va3MgbGlrZSB0aGlzIHByZWRpY3Rpb24gaXMgYm9ybiBvdXQgYnkgdGhlIGRhdGEhIEFic29ycHRpb24gd2FzIHNpZ25pZmljYW50bHkgcG9zaXRpdmVseSBjb3JyZWxhdGVkIHdpdGggcmVwb3J0ZWQgc3Bpcml0dWFsIGV2ZW50cyAoJHIkID0gYHIgcm91bmQyKGNvcjEkZXN0aW1hdGUpYCwgJHAkID0gYHIgaWZlbHNlKGNvcjEkcC52YWx1ZSA8IDAuMDAxLCAiPDAuMDAxIiwgZm9ybWF0KHJvdW5kKGNvcjEkcC52YWx1ZSwgMyksIGRpZ2l0cyA9IDMpKWApLCBhY2NvdW50aW5nIGZvciBhcHByb3hpbWF0ZWx5IGByIHJvdW5kKGNvcjEkZXN0aW1hdGVeMiAqIDEwMClgJSBvZiB0aGUgdmFyaWFuY2UgaW4gcmVwb3J0ZWQgc3BpcnR1YWwgZXZlbnRzLgoKTm93IGxldCdzIHRha2UgYSBsb29rIGF0IHdoYXQncyBnb2luZyBvbiBpbiBlYWNoIHNpdGUgd2l0aCBhIHJlZ3Jlc3Npb24gYW5hbHlzaXM6CgpgYGB7ciwgcmVzdWx0cyA9ICJhc2lzIn0KIyBlZmZlY3QtY29kZSBzaXRlCmNvbnRyYXN0cyhkX3dpZGVfc3Vic2NhbGUkY3RyeSkgPC0gY2JpbmQoZ2hhbmEgPSBjKC0xLCAxLCAwLCAwLCAwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGFpbGFuZCA9IGMoLTEsIDAsIDEsIDAsIDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaW5hID0gYygtMSwgMCwgMCwgMSwgMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFudWF0dSA9IGMoLTEsIDAsIDAsIDAsIDEpKQoKcjEgPC0gbG0oc3BldiB+IGV4d2xfY2VudCAqIGN0cnksIAogICAgICAgICBkX3dpZGVfc3Vic2NhbGUgJT4lIG11dGF0ZShleHdsX2NlbnQgPSBzY2FsZShleHdsLCBzY2FsZSA9IEYpKSkKCnIxX2NvZWYgPC0gc3VtbWFyeShyMSkkY29lZmZpY2llbnRzICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInBhcmFtIikgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgc2UgPSBTdGQuLkVycm9yLCB0ID0gdC52YWx1ZSwgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycyhiLCBzZSwgdCksIGZ1bnMocm91bmQyKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwKICAgICAgICAgICAgICAgICAgICBmb3JtYXQocm91bmQocCwgMyksIGRpZ2l0cyA9IDMpKSwKICAgICAgICAgcGFyYW0gPSBmYWN0b3IocGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIihJbnRlcmNlcHQpIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImN0cnlnaGFuYSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjdHJ5dGhhaWxhbmQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjdHJ5Y2hpbmEiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3RyeXZhbnVhdHUiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXh3bF9jZW50IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXh3bF9jZW50OmN0cnlnaGFuYSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHdsX2NlbnQ6Y3RyeXRoYWlsYW5kIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4d2xfY2VudDpjdHJ5Y2hpbmEiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXh3bF9jZW50OmN0cnl2YW51YXR1IiksCiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoImJhc2VyYXRlIChvdmVyYWxsKSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYXNlcmF0ZSAoZ2hhbmEgdnMuIG92ZXJhbGwpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFzZXJhdGUgKHRoYWlsYW5kIHZzLiBvdmVyYWxsKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJhc2VyYXRlIChjaGluYSB2cy4gb3ZlcmFsbCkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYXNlcmF0ZSAodmFudWF0dSB2cy4gb3ZlcmFsbCkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnNvcnB0aW9uIChvdmVyYWxsKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFic29ycHRpb24gKGdoYW5hIHZzLiBvdmVyYWxsKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFic29ycHRpb24gKHRoYWlsYW5kIHZzLiBvdmVyYWxsKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFic29ycHRpb24gKGNoaW5hIHZzLiBvdmVyYWxsKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFic29ycHRpb24gKHZhbnVhdHUgdnMuIG92ZXJhbGwpIikpKSAlPiUKICBhcnJhbmdlKHBhcmFtKSAlPiUKICBjb2x1bW5fdG9fcm93bmFtZXMoInBhcmFtIikKCmtuaXRyOjprYWJsZShyMV9jb2VmKQpgYGAKClRoZXNlIHJlc3VsdHMgaW5kaWNhdGUgdGhhdCwgYXMgcHJlZGljdGVkLCB0aGVyZSB3YXMgYSBzaWduaWZpY2FudCBwb3NpdGl2ZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBhYnNvcnB0aW9uIGFuZCByZXBvcnRlZCBzcGlyaXR1YWwgZXZlbnRzLCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcyAoJGIkID0gYHIgcjFfY29lZlsiYWJzb3JwdGlvbiAob3ZlcmFsbCkiLCAiYiJdYCwgJHAkID0gYHIgcjFfY29lZlsiYWJzb3JwdGlvbiAob3ZlcmFsbCkiLCAicCJdYCkuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBhYnNvcnB0aW9uIGFuZCBzcGlyaXR1YWwgZXZlbnRzIHdhcyBwYXJ0aWN1bGFybHkgc3Ryb25nIGFtb25nIHBhcnRpY2lwYW50cyBpbiBHaGFuYSAoJGIkID0gYHIgcjFfY29lZlsiYWJzb3JwdGlvbiAoZ2hhbmEgdnMuIG92ZXJhbGwpIiwgImIiXWAsICRwJCA9IGByIHIxX2NvZWZbImFic29ycHRpb24gKGdoYW5hIHZzLiBvdmVyYWxsKSIsICJwIl1gKSwgYW5kIChwZXJoYXBzKSB3ZWFrZXIgdGhhbiBhdmVyYWdlIGFtb25nIHBhcnRpY2lwYW50cyBpbiBDaGluYSAoJGIkID0gYHIgcjFfY29lZlsiYWJzb3JwdGlvbiAoY2hpbmEgdnMuIG92ZXJhbGwpIiwgImIiXWAsICRwJCA9IGByIHIxX2NvZWZbImFic29ycHRpb24gKGNoaW5hIHZzLiBvdmVyYWxsKSIsICJwIl1gKS4KCk5vdGUgYWxzbyB0aGF0IHRoZXJlIGFyZSBvdmVyYWxsIGRpZmZlcmVuY2VzIGluIHRoZSBiYXNlcmF0ZXMgZm9yIHJlcG9ydGluZyBzcGlyaXR1YWwgZXZlbnRzOiBQYXJ0aWNpcGFudHMgaW4gR2hhbmEgYW5kIFZhbnVhdHUgZ2VuZXJhbGx5IHJlcG9ydGVkIG1vcmUgdGhhbiBhdmVyYWdlIChHaGFuYTogJGIkID0gYHIgcjFfY29lZlsiYmFzZXJhdGUgKGdoYW5hIHZzLiBvdmVyYWxsKSIsICJiIl1gLCAkcCQgPSBgciByMV9jb2VmWyJiYXNlcmF0ZSAoZ2hhbmEgdnMuIG92ZXJhbGwpIiwgInAiXWA7IFZhbnVhdHU6ICRiJCA9IGByIHIxX2NvZWZbImJhc2VyYXRlICh2YW51YXR1IHZzLiBvdmVyYWxsKSIsICJiIl1gLCAkcCQgPSBgciByMV9jb2VmWyJiYXNlcmF0ZSAodmFudWF0dSB2cy4gb3ZlcmFsbCkiLCAicCJdYCksIHdoaWxlIHBhcnRpY2lwYW50cyBpbiBUaGFpbGFuZCBhbmQgQ2hpbmEgZ2VuZXJhbGx5IHJlcG9ydGVkIGZld2VyIHRoYW4gYXZlcmFnZSAoVGhhaWxhbmQ6ICRiJCA9IGByIHIxX2NvZWZbImJhc2VyYXRlICh0aGFpbGFuZCB2cy4gb3ZlcmFsbCkiLCAiYiJdYCwgJHAkID0gYHIgcjFfY29lZlsiYmFzZXJhdGUgKHRoYWlsYW5kIHZzLiBvdmVyYWxsKSIsICJwIl1gOyBDaGluYTogJGIkID0gYHIgcjFfY29lZlsiYmFzZXJhdGUgKGNoaW5hIHZzLiBvdmVyYWxsKSIsICJiIl1gLCAkcCQgPSBgciByMV9jb2VmWyJiYXNlcmF0ZSAoY2hpbmEgdnMuIG92ZXJhbGwpIiwgInAiXWApLgoKSGVyZSdzIGEgdmlzdWFsaXphdGlvbiBvZiB0aGVzZSByZWxhdGlvbnNoaXBzOgoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjM3NX0KZ2dwbG90KGRfd2lkZV9zdWJzY2FsZSAlPiUKICAgICAgICAgZmlsdGVyKCFpcy5uYShleHdsKSwgIWlzLm5hKHNwZXYpKSAlPiUKICAgICAgICAgbXV0YXRlKGN0cnkgPSBmYWN0b3IoY3RyeSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoInVzIiwgImdoYW5hIiwgInRoYWlsYW5kIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoaW5hIiwgInZhbnVhdHUiKSksCiAgICAgICAgICAgICAgICBleHdsX2NlbnQgPSBzY2FsZShleHdsLCBzY2FsZSA9IEYpKSwKICAgICAgIGFlcyh4ID0gZXh3bCwgIyB4ID0gZXh3bF9jZW50LCAKICAgICAgICAgICB5ID0gc3BldiwgY29sb3IgPSBjdHJ5KSkgKwogIGZhY2V0X2dyaWQofiBjdHJ5KSArCiAgZ2VvbV9wb2ludChzaXplID0gMSwgYWxwaGEgPSAwLjUpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIpICsKICAjIGdlb21fbGluZShkYXRhID0gZm9ydGlmeShyMSksIGFlcyh4ID0gZXh3bF9jZW50LCB5ID0gLmZpdHRlZCksIGNvbG9yID0gImJsYWNrIikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIHhsaW0oMCwgMzQpICsKICB5bGltKDAsIDg4KSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpICsKICBsYWJzKHRpdGxlID0gInJlbGF0aW9uc2hpcCBiZXR3ZWVuIGFic29ycHRpb24gJiBzcGlyaXR1YWwgZXZlbnRzLCBieSBzaXRlIiwKICAgICAgIGNvbG9yID0gInNpdGUiLAogICAgICAgeCA9ICJhYnNvcnB0aW9uICh0ZWxsZWdlbikiLAogICAgICAgeSA9ICJzcGlyaXR1YWwgZXZlbnRzIChsdWhybWFubikiKQpgYGAKCiMgRHVhbGlzbQoKSGVyZSdzIGp1c3Qgc29tZSBpbml0aWFsIGF0dGVtcHQgdG8gdGFrZSBhIGxvb2sgYXQgaG93IHRoZSBkdWFsaXNtIHF1ZXN0aW9ucyBoYW5nIHRvZ2V0aGVyLi4uIG1vcmUgb24gdGhpcyBsYXRlci4KCmBgYHtyLCBmaWcud2lkdGggPSA1LCBmaWcuYXNwID0gMX0KbGlicmFyeShnZ2RlbmRybykKdGVtcCA8LSBkX2xvbmcgJT4lCiAgZmlsdGVyKGdyZXBsKCJtaW53XyIsIHF1ZXN0aW9uKSwgIWlzLm5hKHJlc3BvbnNlKSkgJT4lCiAgc2VsZWN0KHN1YmosIHF1ZXN0aW9uLCByZXNwb25zZSkgJT4lCiAgbGVmdF9qb2luKHF1ZXN0aW9uX2tleSAlPiUgCiAgICAgICAgICAgICAgc2VsZWN0KHF1ZXN0aW9uX2xhYmVsX3VuaXZlcnNhbCwgCiAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uX3RleHQsIGJ5aGFuZF9zdWJzY2FsZSkgJT4lIAogICAgICAgICAgICAgIHJlbmFtZShxdWVzdGlvbiA9IHF1ZXN0aW9uX2xhYmVsX3VuaXZlcnNhbCkpICU+JQogIGRpc3RpbmN0KHN1YmosIHF1ZXN0aW9uX3RleHQsIHJlc3BvbnNlKSAlPiUKICBzcHJlYWQocXVlc3Rpb25fdGV4dCwgcmVzcG9uc2UpICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByZW1vdmVfcm93bmFtZXMoKSAlPiUKICBjb2x1bW5fdG9fcm93bmFtZXMoInN1YmoiKQogIAp0ZW1wX2NsdXN0IDwtIGhjbHVzdChkaXN0KHQodGVtcCkpKQpnZ2RlbmRyb2dyYW0odGVtcF9jbHVzdCwgcm90YXRlID0gVFJVRSkKYGBgCgo=